package com.lam.common.utils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import cn.hutool.core.util.StrUtil;

public class RegexUtil {
	
	/**
     * 以1开头，后面跟10位数
     */
    public static final String MOBILE_REGEXP = "1[0-9]{10}";

    /**
     * 数字字母下划线 4-16位
     */
    public static final String USER_NAME_REGEXP = "([a-zA-Z0-9_]{4,16})";

    /**
     * 由简单的字母数字拼接而成的字符串 不含有下划线，大写字母
     */
    public static final String SIMPLE_CHAR_REGEXP = "([a-z0-9]+)";
    
	/**
	 * 根据模板提取其中 {XXX} 变量
	 * 例：
	 * <pre>
	 *  模板：abc{project}fjadfd{userId}saffff  => [project, userId]
	 * </pre>
	 * @param template
	 * @return
	 */
	public static List<String> getVarList(String template){
		if(StringUtils.isBlank(template)) {
			return Collections.emptyList();
		}
		Matcher m = Pattern.compile("\\{([^}])*\\}").matcher(template);
    	Set<String> varList = new LinkedHashSet<>();
    	while (m.find()) {
    		varList.add(StringUtils.replaceEach(m.group(), new String[] {"{", "}"}, new String[] {"", ""}));
    	}
    	return new ArrayList<>(varList);
	}
	
	public static void main(String[] args) {
		System.out.println(JsonUtil.toString(getVarList("aslkf{project}asfsa阿里飞拉萨快递费第三方{userid}撒发发三分{ohb}dddddddsfjafsafds")));
	}
	
    public static boolean isMobile(String value) {
        if(StrUtil.isBlank(value)) {
            return false;
        }
        return Pattern.matches(MOBILE_REGEXP, value);
    }

    public static boolean isUserName(String value) {
        if(StrUtil.isBlank(value)) {
            return false;
        }
        return Pattern.matches(USER_NAME_REGEXP, value);
    }

    public static boolean isMatching(String regexp, String value) {
        if (StrUtil.isBlank(value)) {
            return false;
        }
        return Pattern.matches(regexp, value);
    }

    /**
     * 是否是由简单的字母数字拼接而成的字符串
     * @param value 输入值
     * @return 匹配结果
     */
    public static boolean isSimpleChar(String value) {
        return isMatching(SIMPLE_CHAR_REGEXP, value);
    }

}
